Знаю, что на хабре и в гугле эту тему уже не раз обсуждали, тем не менее, когда я, по мануалам, решил сделать свою точку доступа «для друзей», я столкнулся с определенными сложностями, а готовые решения оказались сыроватыми. Потому предлагаю неопытным пользователям GNU/Linux сделать это так, как сделал я.
Раздать wi-fi с 3g модема (и с проводного интернета), когда ничего другого нет под рукой — дело благородное, потому мы пройдем по быстрому пути получения профита. Инструкция предназначена для debian-based дистрибутивов. Нам понадобится hostapd — собственно для раздачи wi-fi, dnsmasq — для раздачи ip-адресов и notify-send (не обязательно) — для оповещений. iptables на данный момент доступен из коробки. Ставим hostapd и останавливаем его:
aptitude install hostapd service hostapd stop
В файле /etc/default/hostapd раскомментируем и исправляем строку:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
Создаем и редактируем файл /etc/hostapd/hostapd.conf
interface=wlan0 driver=nl80211 ssid=wifi_4_friends hw_mode=g channel=6 wpa=2 wpa_passphrase=12345678 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP auth_algs=1 macaddr_acl=0
Тут все просто — имя точки доступа, пароль, канал, на котором будет работать и драйвер.
Ставим dnsmasq и останавливаем его:
aptitude install dnsmasq service dnsmasq stop
dnsmasq хорош тем, что в нем все есть и он прост для настройки. Открываем файл конфигурации /etc/dnsmasq.conf:
interface=wlan0 dhcp-range=192.168.2.2,192.168.2.100,12h
Тут все крайне просто, но если нужно, можно добавить альтернативный dns сервер, а также можно хосты принудительно направлять на 127.0.0.1, тем самым блокируя их. Подробности в справке man dnsmasq. Еще один момент, обязательно адреса dhcp-range должны быть в одной сети с wlan0. если Вы по каким-либо соображениям в скрипте запуска не будете принудительно менять ip адрес для wlan0, то укажите тут пул такой же, как в wlan0. Например дома есть роутер с адресом 192.168.1.1 и сеть 192.168.1.0/24, то dhcp-range нужно указать в пределах этого пространства, а также, чтобы он не пересекался с пулом адресов, выдаваемых dhcp-сервером роутера. Мы пойдем путем по-проще и сами укажем другую подсеть.
Теперь отключим автозагрузку демонов:
update-rc.d hostapd disable update-rc.d dnsmasq disable
Ко всему этому осталось только включать/отключать роутинг и добавлять/удалять правило из iptables
sysctl net.ipv4.ip_forward=1 iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Это будем производить автоматически, с помощью скрипта. Все готово, а вот и сам скрипт wifi-ap:
#!/bin/bash #script to start/stop hostapd, dnsmasq, add/remove iptables rule set -e exec 3>&1 exec 2>&1 >> /tmp/wifi-ap function print_help(){ echo "Start/Stop Software Access Point" echo echo "Usage `basename $0` options..." echo "wifi-ap on to start Software AP" echo "wifi-ap off to stop Software AP" echo echo "log-file - /tmp/wifi-ap" echo } if [ $# = 0 ]; then print_help >&3 exit 0 fi if [ $1 = on ]; then ifconfig wlan0 192.168.2.1 service dnsmasq start sysctl net.ipv4.ip_forward=1 iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE service hostapd start notify-send --expire-time=4000 "Software Access Point" "<b>start</b>" exit 0 fi if [ $1 = off ]; then service dnsmasq stop service hostapd stop ifconfig wlan0 192.168.1.4 sysctl net.ipv4.ip_forward=0 iptables -D POSTROUTING -t nat -o ppp0 -j MASQUERADE notify-send --expire-time=4000 "Software Access Point" "<b>stop</b>" exit 0 fi
Он принимает 2 параметра, on и off. Вы легко можете подкорректировать его под себя и, если нужно, заменить интерфейс ppp0 на eth0 (или другой, на Ваше усмотрение).
Я пользователь debian и не использую sudo, а Вам может понадобиться.
Приятного использования.
ссылка на оригинал статьи http://habrahabr.ru/post/210426/